package Modelo;


import java.util.*;

import Controlador.Controlador;
import Vista.VentanaFinNivel;

public class Dios extends Thread {
	
	private List<Planeta> planetas;
	
	private Planeta planetaActual;
	
	private boolean continuar;

	private Reloj reloj;
	private int numeroNivel;
	private Controlador controlador;
	
	public Dios(){
		this.planetas = new LinkedList<Planeta>();
		setPlanetas();
		this.numeroNivel=1;
		planetaActual=this.getPrimeroPlaneta();
		continuar=true;
	}
	
	public void setPlanetas(){

		this.planetas.add(new Planeta("Niveles/Nivel1.txt"));
		this.planetas.add(new Planeta("Niveles/Nivel2.txt"));
		this.planetas.add(new Planeta("Niveles/Nivel3.txt"));
		this.planetas.add(new Planeta("Niveles/Nivel4.txt"));
		this.planetas.add(new Planeta("Niveles/Nivel5.txt"));

	}
	
	public void setReloj(Reloj reloj){
		this.reloj=reloj;
	}
	
	public void setControlador(Controlador controlador){
		this.controlador=controlador;
	}
	
	public void cargarPlanetaActual(Planeta planeta){

		this.planetas.add(0,planeta);
		this.planetaActual=planeta;
	}
	
	/*
	 * Metodo que solo esta para el main
	 */
	
	public Planeta getPrimeroPlaneta (){
		Iterator<Planeta> iterador = planetas.iterator();
		if (iterador.hasNext()){
			return iterador.next();
		}
		else 
			return null;	
	}
	
	public Planeta getPlanetaActual (){
		return this.planetaActual;	
	}
	
	public void setPlanetaActual(Planeta planeta){
		this.planetaActual=planeta;				
	}
	
	public void cargarSiguienteNivel(){		
		this.planetaActual= planetas.get(numeroNivel++);
		this.numeroNivel++;
	}
	
	public synchronized void moverPooglins(Planeta planeta){
		setPlanetaActual(planeta);
		List<Pooglin> losPooglins = planetaActual.getPooglins();
		Iterator<Pooglin> iterador=losPooglins.iterator();
		while (iterador.hasNext()&&!losPooglins.isEmpty()){
			Pooglin estePooglin=iterador.next();
			if (estePooglin.getVelocidad()!=1){
				for (int i=0;i<estePooglin.getVelocidad();i++){
					estePooglin.mover();
				}
			}else{
				estePooglin.mover();
			}
		}
		this.planetaActual.quitarPooglinsMuertos();
		this.planetaActual.quitarPooglinsSalvados();
		if (this.getPlanetaActual().getPooglins().isEmpty()&&
				this.planetaActual.getCantidadPooglinsSalvados()>3){
			VentanaFinNivel ventana = new VentanaFinNivel();
			this.reloj.detenerReloj();
			detenerDios();
			ventana.HasGanado();
			this.cargarSiguienteNivel();
			controlador.cargarSiguienteNivel();
		}else{
			if (this.getPlanetaActual().getPooglins().isEmpty())
				if(this.planetaActual.getCantidadPooglinsEnPlaneta()==
					Constantes.CANTIDAD_POOGLINS_PLANETA+1){
					VentanaFinNivel ventana = new VentanaFinNivel();
					detenerDios();
					this.reloj.detenerReloj();
					ventana.HasPerdido();
				}	
			}
		}
	
	public void detenerDios(){
		this.continuar=false;
	}
	
	public void continuarDios(){
		this.continuar=true;
	}
	
	public void run(){
		// Retasamos la ejecución el tiempo especificado
		try {
			List<Pooglin> pooglins = this.getPlanetaActual().getPooglins();
			if (pooglins.size()<Constantes.CANTIDAD_POOGLINS_PLANETA){
				this.getPlanetaActual().agregarPooglin();
				this.planetaActual.aumentarPooglinsEnPlaneta();
			}
			while (continuar){
				sleep( 400 );				
				moverPooglins(this.getPlanetaActual());
			}
		
		} catch( InterruptedException e ) {
			;
		}		

	}
	
}
